<?php
	
	
	/**
	* 调用获取tocken方法，可以自动化管理tocken,保证tocken可用，并始终返回可用的tocken
	* 函数使用文件存储tocken
	*/
	class AccessToken
	{
		
		#存储accesstoken使用文件 文件内容{到期时间戳：acesstoken}
		const ACCESSTOKENFILE='txt/accesstoken.txt';

		protected $curl=null;

		function __construct()
		{
			$this->curl=new Curl();
		}
		
		//创建渠道二维码
		function createQuDaoErWeiMa($id, $imgurl='')
		{	
			$arr=[];
			$tmp='';
			$sc= $id;
			$img='ewm/'.$sc.'.jpg';
			$page='pages/erWeiMa/erWeiMa';
			if(self::savePageErWeiMa($img,$page,$sc)){
				//$arr[]=DIR.$img;
				$tmp=DIR.$img;
				return $tmp;
			}else{
				die( 'create die');
			}
			/*
			$img2='ewm/'.$sc.'.png';
			if(self::savePageErWeiMa($img2,$page,$sc)){
				$arr[]=DIR.$img2;
			}else{
				die( 'create die');
			}
			return json_encode($arr);
			*/
		}

		//保存页面二维码
		function savePageErWeiMa($img,$page,$sc){
			 
			#不存在或者不正常
			$tkn=$this->getTocken();
			//echo $tkn;
			
			$wxewmapiurl="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$tkn;
			$r= $this->curl->postText(
				$wxewmapiurl,
				array(
					'scene'=>'?n='.$sc,
					'page'=>$page,
					'auto_color'=>true,		//调整颜色
					//'is_hyaline'=>true,	//不可透明 扫描不出来
					
				)
			);
			if(!$r){
				#进入此处说明curl结果异常
				var_dump($r);
				die('create fail');			
			}
			//var_dump($r);
			//die();
			#会返回文件大小 或者 false
			$result=file_put_contents($img,$r);
			if($result===false){
				#写入失败，删除文件！
				unlink($img) or die('推广二维码不完整但是删除失败！');
				return false;
			}
			return true; 
		}
		
		//获取推每个人的推广二维码
		public function getwxewm(){
			$id=$_REQUEST['id'];
			$img='img/'.$id.'.png';
			$page=$_REQUEST['page'];
			$sc= $id;
			if(self::savePageErWeiMa($img,$page,$sc)){
				echo DIR2.$img;
			}else{
				echo 'create die';
			}
		}

		//获取tocken 仅仅调一个函数就可以了
		public function getTocken(){
			//确保文件存在
			if(file_exists(self::ACCESSTOKENFILE)){
				//echo 'tocken文件存在，不做任何操作';
			}else{
				file_put_contents(self::ACCESSTOKENFILE,'2:abcde');
				//echo '文件不存在，刚创建了它,并写入虚拟过期时间和token值';
			}
			//设置中国区时间
			date_default_timezone_set('PRC');
			//time()返回的是19700101到现在的秒数，微信返回周期也是秒数，得到当前秒数
			$tm=time();
			//读取内容
			$data=file_get_contents(self::ACCESSTOKENFILE);
			//echo $data; 打散成数组
			$arr=explode(':', $data) ;
			//得到过期时间和accesstoken的值
			$guoqishijian=$arr[0];
			$tocken=$arr[1];

			//print_r($arr);
			//过期时间和当前时间秒对比
			if ($guoqishijian>$tm) {
				//echo '还没过期',$tocken;
				//echo $tocken; //没有过期则直接输出数据
				return $tocken;
			}else{
				//	官方网址
				//	https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
				//获取token的网址
				$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.
					APPID.'&secret='.SECRET;
				//echo $url;
				//die();
				//$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx84bb14d330df679c&secret=6b34a9ec0f3903fd3ed6e0d02f0d0142';
				/*
				 * 结果
				 * {"access_token":"32_w_L7rNPXO25ltrrj_Q_N7KsioDKpQYMKsRq6qIp71gcWIPJrKRT59xum-yA5IaSmxCY8nwPqCGX00HI75cua3_qZpZpTHD94AW6VZo3JFxJIHM2cP_4j8Iie8Ac8K2gFxvUI2B50HLfhFi1EPRKjACAYAT","expires_in":7200}
				 */
				
				//浏览器里面的网址
				//	https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx84bb14d330df679c&secret=6b34a9ec0f3903fd3ed6e0d02f0d0142
				$jsonStr=$this->curl->getText($url);
				//var_dump($jsonStr);
				//返回值示例
				//{"access_token":"13_lXnlmGjtz9aZmF_YwG7KeLkLl32Py94mKxWlj_V43B4afRGWdd2c76bIp_FH2QZA5t0Vf94Zcq2HoqMkBZ_R5Z-3fp-GbmoU32uKe-DO4uS4abn1yWv0W6jblD13dDANiNSRgSmCl8Uh0hVoKJDaADAPOI","expires_in":7200}
				$arr = json_decode($jsonStr, true);
				//var_dump($arr);
				$access_token=$arr['access_token'];
				//有效时间 一般是2小时
				$expires_in=$arr['expires_in'];
				//真正到期时间提前10秒
				$end_tm=$tm-10+$expires_in;
				//构造需要保存的数据，过期时间：可用值
				$data=$end_tm.':'.$access_token;
				//写入文件覆盖从前的token，以便于复用没到期的数据
				file_put_contents(self::ACCESSTOKENFILE,$data);
				//返回给其他代码使用
				return $access_token;
			}
			
		}
	}
?>